package com.dingwen.treasure.tkmybatis.service.base;

import com.dingwen.treasure.tkmybatis.dao.BaseMapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.Serializable;
import java.util.List;

/**
 * 　BaseServiceImpl
 * 　@author dingwen
 * 　@date 2022/7/4
 */
public class BaseServiceImpl<T, M extends BaseMapper<T>> implements BaseService<T> {


    /**
     * baseMapper
     */
    @Autowired
    protected M baseMapper;

    /**
     * 根据实体查询条件获取列表
     *
     * @param t 实体查询条件
     * @return {@link List}<{@link T}>
     */
    @Override
    public List<T> getList(T t) {
        return baseMapper.select(t);
    }

    /**
     * 查询全部返回列表
     *
     * @return {@link List}<{@link T}>
     */
    @Override
    public List<T> getAll() {
        return baseMapper.selectAll();
    }

    /**
     * 按id获取
     *
     * @param id 主键
     * @return {@link T}
     */
    @Override
    public T getById(Serializable id) {
        return baseMapper.selectByPrimaryKey(id);
    }

    /**
     * 按ID获取
     * 按ID集合获取
     *
     * @param ids ids
     * @return {@link List}<{@link T}>
     */
    @Override
    public List<T> getByIds(List<Serializable> ids) {
        return null;
    }

    /**
     * 根据id查询是否存在
     *
     * @param id 主键
     * @return boolean
     */
    @Override
    public boolean existById(Serializable id) {
        return baseMapper.existsWithPrimaryKey(id);
    }

    /**
     * 按id删除
     *
     * @param id 主键
     * @return boolean
     */
    @Override
    public boolean removeById(Serializable id) {
        return baseMapper.deleteByPrimaryKey(id) > 0;
    }

    /**
     * 根据ID集合删除
     *
     * @param ids ids
     * @return boolean
     */
    @Override
    public boolean removeByIds(List<Serializable> ids) {
        return false;
    }

    /**
     * 可选编辑(动态参数)
     *
     * @param t 实体查询条件
     * @return
     */
    @Override
    public boolean modify(T t) {
        return baseMapper.updateByPrimaryKeySelective(t) > 0;
    }

    /**
     * 可选新增(动态参数) 自增id已配置回写
     *
     * @param t 实体查询条件
     * @return
     */
    @Override
    public T add(T t) {
        baseMapper.insertSelective(t);
        return t;
    }
}
